{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "from dataset import TIMITDataset_\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from torch.utils.data import  DataLoader\n",
    "from torch.utils.tensorboard import SummaryWriter\n",
    "from sklearn import metrics\n",
    "from  visualize import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SimpleClassifier(nn.Module):\n",
    "    def __init__(self, num_classes, input_dim):\n",
    "        super().__init__()\n",
    "        self.fc1 = nn.Linear(input_dim, 80)  # 第一个全连接层\n",
    "        self.bn1 = nn.BatchNorm1d(80)\n",
    "        self.fc2 = nn.Linear(80,125)\n",
    "        self.bn2 = nn.BatchNorm1d(125)\n",
    "        self.drop2 = nn.Dropout(0.5)\n",
    "        self.fc3 = nn.Linear(125,num_classes)\n",
    "\n",
    "    def forward(self, mels):\n",
    "        x = F.relu(self.bn1(self.fc1(mels)))\n",
    "        x = F.relu(self.drop2(self.bn2(self.fc2(x))))\n",
    "        x = self.fc3(x)\n",
    "\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(model,train_loader,val_loader,num_epochs,device,loss_func,optimizer):\n",
    "    writer = SummaryWriter(log_dir='./log')\n",
    "\n",
    "    for epoch in range(num_epochs):\n",
    "        model.to(device)\n",
    "        model.train()\n",
    "        running_loss = 0.0\n",
    "        correct_predictions = 0\n",
    "\n",
    "        for inputs, labels in train_loader:\n",
    "            inputs, labels = inputs.to(device), labels.to(device)\n",
    "\n",
    "            optimizer.zero_grad()\n",
    "            outputs = model(inputs)\n",
    "            loss = loss_func(outputs, labels)\n",
    "            loss.backward()\n",
    "            optimizer.step()\n",
    "\n",
    "            running_loss += loss.item()\n",
    "            _, predictions = torch.max(outputs, 1)\n",
    "            correct_predictions += (predictions == labels).sum().item()\n",
    "\n",
    "        epoch_loss = running_loss / len(train_loader.dataset)\n",
    "        epoch_acc = correct_predictions / len(train_loader.dataset)\n",
    "\n",
    "        model.eval()\n",
    "        val_running_loss = 0.0\n",
    "        val_correct_predictions = 0\n",
    "\n",
    "        with torch.no_grad():\n",
    "            for inputs, labels in val_loader:\n",
    "                inputs, labels = inputs.to(device), labels.to(device)\n",
    "                outputs = model(inputs)\n",
    "                loss = loss_func(outputs, labels)\n",
    "\n",
    "                val_running_loss += loss.item()\n",
    "                _, predictions = torch.max(outputs, 1)\n",
    "                val_correct_predictions += (predictions == labels).sum().item()\n",
    "\n",
    "        val_epoch_loss = val_running_loss / len(val_loader.dataset)\n",
    "        val_epoch_acc = val_correct_predictions / len(val_loader.dataset)\n",
    "        # 用tensorboard可视化\n",
    "        writer.add_scalars('train/val accuracy and loss',tag_scalar_dict={'train_acc':epoch_acc,\n",
    "                                                                        'loss':epoch_loss,\n",
    "                                                                        'val_acc':val_epoch_acc\n",
    "                                                                        },global_step=epoch+1)\n",
    "\n",
    "        print(f'Epoch {epoch+1}/{num_epochs}')\n",
    "        print(f'Train Loss: {epoch_loss:.4f} Acc: {epoch_acc:.4f}')\n",
    "        print(f'Val Loss: {val_epoch_loss:.4f} Acc: {val_epoch_acc:.4f}')\n",
    "\n",
    "    writer.close()\n",
    "    torch.save(model.state_dict(),r'.\\final_model.pth')\n",
    "    print('Finished Training')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_dataset = TIMITDataset_(\"Dataset\")\n",
    "test_dataset  = TIMITDataset_(\"Dataset\",split='test')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_loader = DataLoader(train_dataset,batch_size=24,shuffle=True)\n",
    "test_loader = DataLoader(test_dataset,batch_size=24)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练参数准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_classes = len(train_dataset.speakers)\n",
    "model = SimpleClassifier(num_classes=num_classes, input_dim=40)\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/80\n",
      "Train Loss: 0.2536 Acc: 0.0108\n",
      "Val Loss: 0.2223 Acc: 0.0346\n",
      "Epoch 2/80\n",
      "Train Loss: 0.1953 Acc: 0.0642\n",
      "Val Loss: 0.1954 Acc: 0.0855\n",
      "Epoch 3/80\n",
      "Train Loss: 0.1636 Acc: 0.1349\n",
      "Val Loss: 0.1837 Acc: 0.1104\n",
      "Epoch 4/80\n",
      "Train Loss: 0.1335 Acc: 0.2356\n",
      "Val Loss: 0.1430 Acc: 0.2403\n",
      "Epoch 5/80\n",
      "Train Loss: 0.1153 Acc: 0.3135\n",
      "Val Loss: 0.1437 Acc: 0.2435\n",
      "Epoch 6/80\n",
      "Train Loss: 0.1017 Acc: 0.3748\n",
      "Val Loss: 0.1346 Acc: 0.2630\n",
      "Epoch 7/80\n",
      "Train Loss: 0.0876 Acc: 0.4268\n",
      "Val Loss: 0.1390 Acc: 0.3052\n",
      "Epoch 8/80\n",
      "Train Loss: 0.0792 Acc: 0.4859\n",
      "Val Loss: 0.1241 Acc: 0.3182\n",
      "Epoch 9/80\n",
      "Train Loss: 0.0713 Acc: 0.5263\n",
      "Val Loss: 0.1077 Acc: 0.4134\n",
      "Epoch 10/80\n",
      "Train Loss: 0.0643 Acc: 0.5527\n",
      "Val Loss: 0.0855 Acc: 0.4924\n",
      "Epoch 11/80\n",
      "Train Loss: 0.0600 Acc: 0.5833\n",
      "Val Loss: 0.1284 Acc: 0.3680\n",
      "Epoch 12/80\n",
      "Train Loss: 0.0588 Acc: 0.5869\n",
      "Val Loss: 0.0976 Acc: 0.4654\n",
      "Epoch 13/80\n",
      "Train Loss: 0.0491 Acc: 0.6508\n",
      "Val Loss: 0.1334 Acc: 0.3777\n",
      "Epoch 14/80\n",
      "Train Loss: 0.0494 Acc: 0.6526\n",
      "Val Loss: 0.0749 Acc: 0.5455\n",
      "Epoch 15/80\n",
      "Train Loss: 0.0475 Acc: 0.6641\n",
      "Val Loss: 0.0890 Acc: 0.5000\n",
      "Epoch 16/80\n",
      "Train Loss: 0.0447 Acc: 0.6793\n",
      "Val Loss: 0.0666 Acc: 0.5887\n",
      "Epoch 17/80\n",
      "Train Loss: 0.0409 Acc: 0.7053\n",
      "Val Loss: 0.0767 Acc: 0.6071\n",
      "Epoch 18/80\n",
      "Train Loss: 0.0416 Acc: 0.7035\n",
      "Val Loss: 0.0934 Acc: 0.4946\n",
      "Epoch 19/80\n",
      "Train Loss: 0.0402 Acc: 0.7168\n",
      "Val Loss: 0.0659 Acc: 0.6504\n",
      "Epoch 20/80\n",
      "Train Loss: 0.0377 Acc: 0.7219\n",
      "Val Loss: 0.0596 Acc: 0.6515\n",
      "Epoch 21/80\n",
      "Train Loss: 0.0342 Acc: 0.7569\n",
      "Val Loss: 0.0717 Acc: 0.5996\n",
      "Epoch 22/80\n",
      "Train Loss: 0.0340 Acc: 0.7525\n",
      "Val Loss: 0.0550 Acc: 0.6775\n",
      "Epoch 23/80\n",
      "Train Loss: 0.0335 Acc: 0.7540\n",
      "Val Loss: 0.0652 Acc: 0.6277\n",
      "Epoch 24/80\n",
      "Train Loss: 0.0322 Acc: 0.7662\n",
      "Val Loss: 0.0620 Acc: 0.6385\n",
      "Epoch 25/80\n",
      "Train Loss: 0.0306 Acc: 0.7756\n",
      "Val Loss: 0.0814 Acc: 0.5963\n",
      "Epoch 26/80\n",
      "Train Loss: 0.0297 Acc: 0.7796\n",
      "Val Loss: 0.0606 Acc: 0.6515\n",
      "Epoch 27/80\n",
      "Train Loss: 0.0304 Acc: 0.7767\n",
      "Val Loss: 0.0576 Acc: 0.6894\n",
      "Epoch 28/80\n",
      "Train Loss: 0.0302 Acc: 0.7713\n",
      "Val Loss: 0.0595 Acc: 0.6645\n",
      "Epoch 29/80\n",
      "Train Loss: 0.0285 Acc: 0.7955\n",
      "Val Loss: 0.0525 Acc: 0.6677\n",
      "Epoch 30/80\n",
      "Train Loss: 0.0259 Acc: 0.8048\n",
      "Val Loss: 0.0742 Acc: 0.6223\n",
      "Epoch 31/80\n",
      "Train Loss: 0.0286 Acc: 0.7828\n",
      "Val Loss: 0.0533 Acc: 0.7002\n",
      "Epoch 32/80\n",
      "Train Loss: 0.0277 Acc: 0.7890\n",
      "Val Loss: 0.1081 Acc: 0.5173\n",
      "Epoch 33/80\n",
      "Train Loss: 0.0274 Acc: 0.7955\n",
      "Val Loss: 0.0648 Acc: 0.6407\n",
      "Epoch 34/80\n",
      "Train Loss: 0.0291 Acc: 0.7821\n",
      "Val Loss: 0.0518 Acc: 0.6786\n",
      "Epoch 35/80\n",
      "Train Loss: 0.0266 Acc: 0.8001\n",
      "Val Loss: 0.0657 Acc: 0.6807\n",
      "Epoch 36/80\n",
      "Train Loss: 0.0259 Acc: 0.8088\n",
      "Val Loss: 0.0768 Acc: 0.5844\n",
      "Epoch 37/80\n",
      "Train Loss: 0.0258 Acc: 0.8160\n",
      "Val Loss: 0.0511 Acc: 0.7024\n",
      "Epoch 38/80\n",
      "Train Loss: 0.0251 Acc: 0.8117\n",
      "Val Loss: 0.0534 Acc: 0.7154\n",
      "Epoch 39/80\n",
      "Train Loss: 0.0227 Acc: 0.8319\n",
      "Val Loss: 0.0455 Acc: 0.7511\n",
      "Epoch 40/80\n",
      "Train Loss: 0.0239 Acc: 0.8261\n",
      "Val Loss: 0.0682 Acc: 0.6721\n",
      "Epoch 41/80\n",
      "Train Loss: 0.0230 Acc: 0.8240\n",
      "Val Loss: 0.0513 Acc: 0.7229\n",
      "Epoch 42/80\n",
      "Train Loss: 0.0241 Acc: 0.8193\n",
      "Val Loss: 0.0528 Acc: 0.7089\n",
      "Epoch 43/80\n",
      "Train Loss: 0.0229 Acc: 0.8315\n",
      "Val Loss: 0.0417 Acc: 0.7370\n",
      "Epoch 44/80\n",
      "Train Loss: 0.0204 Acc: 0.8528\n",
      "Val Loss: 0.0812 Acc: 0.6169\n",
      "Epoch 45/80\n",
      "Train Loss: 0.0205 Acc: 0.8391\n",
      "Val Loss: 0.0513 Acc: 0.7110\n",
      "Epoch 46/80\n",
      "Train Loss: 0.0238 Acc: 0.8323\n",
      "Val Loss: 0.0590 Acc: 0.6981\n",
      "Epoch 47/80\n",
      "Train Loss: 0.0191 Acc: 0.8575\n",
      "Val Loss: 0.0434 Acc: 0.7695\n",
      "Epoch 48/80\n",
      "Train Loss: 0.0212 Acc: 0.8402\n",
      "Val Loss: 0.0402 Acc: 0.7608\n",
      "Epoch 49/80\n",
      "Train Loss: 0.0195 Acc: 0.8470\n",
      "Val Loss: 0.0552 Acc: 0.7132\n",
      "Epoch 50/80\n",
      "Train Loss: 0.0226 Acc: 0.8286\n",
      "Val Loss: 0.0487 Acc: 0.7446\n",
      "Epoch 51/80\n",
      "Train Loss: 0.0211 Acc: 0.8384\n",
      "Val Loss: 0.0477 Acc: 0.7457\n",
      "Epoch 52/80\n",
      "Train Loss: 0.0202 Acc: 0.8488\n",
      "Val Loss: 0.0432 Acc: 0.7522\n",
      "Epoch 53/80\n",
      "Train Loss: 0.0190 Acc: 0.8586\n",
      "Val Loss: 0.0700 Acc: 0.6472\n",
      "Epoch 54/80\n",
      "Train Loss: 0.0189 Acc: 0.8582\n",
      "Val Loss: 0.0360 Acc: 0.7922\n",
      "Epoch 55/80\n",
      "Train Loss: 0.0185 Acc: 0.8561\n",
      "Val Loss: 0.0461 Acc: 0.7641\n",
      "Epoch 56/80\n",
      "Train Loss: 0.0188 Acc: 0.8568\n",
      "Val Loss: 0.0463 Acc: 0.7684\n",
      "Epoch 57/80\n",
      "Train Loss: 0.0201 Acc: 0.8557\n",
      "Val Loss: 0.0655 Acc: 0.6872\n",
      "Epoch 58/80\n",
      "Train Loss: 0.0190 Acc: 0.8586\n",
      "Val Loss: 0.0507 Acc: 0.7489\n",
      "Epoch 59/80\n",
      "Train Loss: 0.0168 Acc: 0.8759\n",
      "Val Loss: 0.0433 Acc: 0.7868\n",
      "Epoch 60/80\n",
      "Train Loss: 0.0176 Acc: 0.8665\n",
      "Val Loss: 0.0465 Acc: 0.7565\n",
      "Epoch 61/80\n",
      "Train Loss: 0.0179 Acc: 0.8546\n",
      "Val Loss: 0.0442 Acc: 0.7727\n",
      "Epoch 62/80\n",
      "Train Loss: 0.0191 Acc: 0.8561\n",
      "Val Loss: 0.0484 Acc: 0.7500\n",
      "Epoch 63/80\n",
      "Train Loss: 0.0192 Acc: 0.8622\n",
      "Val Loss: 0.0686 Acc: 0.6310\n",
      "Epoch 64/80\n",
      "Train Loss: 0.0157 Acc: 0.8788\n",
      "Val Loss: 0.0440 Acc: 0.7781\n",
      "Epoch 65/80\n",
      "Train Loss: 0.0186 Acc: 0.8586\n",
      "Val Loss: 0.0522 Acc: 0.7294\n",
      "Epoch 66/80\n",
      "Train Loss: 0.0179 Acc: 0.8680\n",
      "Val Loss: 0.0445 Acc: 0.7673\n",
      "Epoch 67/80\n",
      "Train Loss: 0.0154 Acc: 0.8885\n",
      "Val Loss: 0.0490 Acc: 0.7684\n",
      "Epoch 68/80\n",
      "Train Loss: 0.0178 Acc: 0.8676\n",
      "Val Loss: 0.0442 Acc: 0.7944\n",
      "Epoch 69/80\n",
      "Train Loss: 0.0166 Acc: 0.8817\n",
      "Val Loss: 0.0471 Acc: 0.7543\n",
      "Epoch 70/80\n",
      "Train Loss: 0.0168 Acc: 0.8712\n",
      "Val Loss: 0.0457 Acc: 0.7749\n",
      "Epoch 71/80\n",
      "Train Loss: 0.0178 Acc: 0.8651\n",
      "Val Loss: 0.0554 Acc: 0.7100\n",
      "Epoch 72/80\n",
      "Train Loss: 0.0183 Acc: 0.8636\n",
      "Val Loss: 0.0547 Acc: 0.7327\n",
      "Epoch 73/80\n",
      "Train Loss: 0.0171 Acc: 0.8589\n",
      "Val Loss: 0.0378 Acc: 0.8074\n",
      "Epoch 74/80\n",
      "Train Loss: 0.0150 Acc: 0.8828\n",
      "Val Loss: 0.0480 Acc: 0.7587\n",
      "Epoch 75/80\n",
      "Train Loss: 0.0145 Acc: 0.8842\n",
      "Val Loss: 0.0374 Acc: 0.7987\n",
      "Epoch 76/80\n",
      "Train Loss: 0.0160 Acc: 0.8820\n",
      "Val Loss: 0.0356 Acc: 0.8084\n",
      "Epoch 77/80\n",
      "Train Loss: 0.0165 Acc: 0.8737\n",
      "Val Loss: 0.0462 Acc: 0.7738\n",
      "Epoch 78/80\n",
      "Train Loss: 0.0172 Acc: 0.8633\n",
      "Val Loss: 0.0329 Acc: 0.8236\n",
      "Epoch 79/80\n",
      "Train Loss: 0.0157 Acc: 0.8777\n",
      "Val Loss: 0.0439 Acc: 0.7738\n",
      "Epoch 80/80\n",
      "Train Loss: 0.0161 Acc: 0.8795\n",
      "Val Loss: 0.0433 Acc: 0.7630\n",
      "Finished Training\n"
     ]
    }
   ],
   "source": [
    "train(model,train_loader,test_loader,num_epochs=80,device='cuda',loss_func=criterion,optimizer=optimizer)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 结果可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tensorboard 显示训练参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "UsageError: Line magic function `%tensorboard` not found.\n"
     ]
    }
   ],
   "source": [
    "%tensorboard --logdir log"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.load_state_dict(torch.load(r'E:\\py_code\\voice-processing\\experiment2\\final_model.pth'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 混淆矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def valid(model,val_loader):\n",
    "    # 获得测试集的真实标签列表和使用模型预测的结果列表\n",
    "        model.eval()\n",
    "        model.to('cpu')\n",
    "        true_label = []\n",
    "        pre_label = []\n",
    "        with torch.no_grad():\n",
    "            for inputs, labels in val_loader:\n",
    "                inputs, labels = inputs, labels\n",
    "                outputs = model(inputs)\n",
    "                _, predictions = torch.max(outputs, 1)\n",
    "                true_label.extend(labels.tolist())\n",
    "                pre_label.extend(predictions.tolist())\n",
    "        return true_label,pre_label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "true_label,pre_label = valid(model,test_loader)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
     ]
    }
   ],
   "source": [
    "report,confuse = evaluate(pre_label,true_label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00         2\n",
      "           1       1.00      1.00      1.00         2\n",
      "           2       1.00      1.00      1.00         2\n",
      "           3       1.00      0.50      0.67         2\n",
      "           4       1.00      1.00      1.00         2\n",
      "           5       0.67      1.00      0.80         2\n",
      "           6       1.00      0.50      0.67         2\n",
      "           7       1.00      0.50      0.67         2\n",
      "           8       1.00      1.00      1.00         2\n",
      "           9       1.00      0.50      0.67         2\n",
      "          10       1.00      0.50      0.67         2\n",
      "          11       1.00      1.00      1.00         2\n",
      "          12       1.00      1.00      1.00         2\n",
      "          13       1.00      1.00      1.00         2\n",
      "          14       1.00      1.00      1.00         2\n",
      "          15       1.00      1.00      1.00         2\n",
      "          16       0.00      0.00      0.00         2\n",
      "          17       1.00      0.50      0.67         2\n",
      "          18       0.67      1.00      0.80         2\n",
      "          19       1.00      1.00      1.00         2\n",
      "          20       0.29      1.00      0.44         2\n",
      "          21       0.67      1.00      0.80         2\n",
      "          22       0.00      0.00      0.00         2\n",
      "          23       1.00      1.00      1.00         2\n",
      "          24       1.00      0.50      0.67         2\n",
      "          25       1.00      1.00      1.00         2\n",
      "          26       1.00      1.00      1.00         2\n",
      "          27       1.00      1.00      1.00         2\n",
      "          28       0.50      0.50      0.50         2\n",
      "          29       0.00      0.00      0.00         2\n",
      "          30       0.50      1.00      0.67         2\n",
      "          31       0.67      1.00      0.80         2\n",
      "          32       0.00      0.00      0.00         2\n",
      "          33       1.00      1.00      1.00         2\n",
      "          34       0.00      0.00      0.00         2\n",
      "          35       1.00      1.00      1.00         2\n",
      "          36       1.00      1.00      1.00         2\n",
      "          37       1.00      1.00      1.00         2\n",
      "          38       0.50      0.50      0.50         2\n",
      "          39       0.67      1.00      0.80         2\n",
      "          40       0.50      0.50      0.50         2\n",
      "          41       1.00      0.50      0.67         2\n",
      "          42       1.00      1.00      1.00         2\n",
      "          43       1.00      1.00      1.00         2\n",
      "          44       1.00      1.00      1.00         2\n",
      "          45       1.00      1.00      1.00         2\n",
      "          46       1.00      1.00      1.00         2\n",
      "          47       1.00      1.00      1.00         2\n",
      "          48       0.00      0.00      0.00         2\n",
      "          49       0.50      1.00      0.67         2\n",
      "          50       1.00      0.50      0.67         2\n",
      "          51       1.00      1.00      1.00         2\n",
      "          52       1.00      1.00      1.00         2\n",
      "          53       1.00      0.50      0.67         2\n",
      "          54       0.33      0.50      0.40         2\n",
      "          55       0.67      1.00      0.80         2\n",
      "          56       1.00      0.50      0.67         2\n",
      "          57       1.00      0.50      0.67         2\n",
      "          58       1.00      1.00      1.00         2\n",
      "          59       0.67      1.00      0.80         2\n",
      "          60       0.00      0.00      0.00         2\n",
      "          61       0.67      1.00      0.80         2\n",
      "          62       1.00      1.00      1.00         2\n",
      "          63       1.00      1.00      1.00         2\n",
      "          64       1.00      1.00      1.00         2\n",
      "          65       1.00      0.50      0.67         2\n",
      "          66       1.00      1.00      1.00         2\n",
      "          67       1.00      0.50      0.67         2\n",
      "          68       0.67      1.00      0.80         2\n",
      "          69       0.50      0.50      0.50         2\n",
      "          70       1.00      0.50      0.67         2\n",
      "          71       0.67      1.00      0.80         2\n",
      "          72       1.00      1.00      1.00         2\n",
      "          73       1.00      1.00      1.00         2\n",
      "          74       0.40      1.00      0.57         2\n",
      "          75       1.00      0.50      0.67         2\n",
      "          76       1.00      1.00      1.00         2\n",
      "          77       1.00      1.00      1.00         2\n",
      "          78       0.50      0.50      0.50         2\n",
      "          79       1.00      0.50      0.67         2\n",
      "          80       1.00      1.00      1.00         2\n",
      "          81       0.67      1.00      0.80         2\n",
      "          82       0.67      1.00      0.80         2\n",
      "          83       1.00      0.50      0.67         2\n",
      "          84       0.00      0.00      0.00         2\n",
      "          85       0.67      1.00      0.80         2\n",
      "          86       1.00      0.50      0.67         2\n",
      "          87       0.40      1.00      0.57         2\n",
      "          88       1.00      1.00      1.00         2\n",
      "          89       1.00      1.00      1.00         2\n",
      "          90       0.67      1.00      0.80         2\n",
      "          91       0.50      0.50      0.50         2\n",
      "          92       0.67      1.00      0.80         2\n",
      "          93       0.67      1.00      0.80         2\n",
      "          94       0.33      0.50      0.40         2\n",
      "          95       1.00      1.00      1.00         2\n",
      "          96       0.67      1.00      0.80         2\n",
      "          97       0.00      0.00      0.00         2\n",
      "          98       0.67      1.00      0.80         2\n",
      "          99       1.00      0.50      0.67         2\n",
      "         100       0.50      0.50      0.50         2\n",
      "         101       1.00      0.50      0.67         2\n",
      "         102       1.00      1.00      1.00         2\n",
      "         103       1.00      0.50      0.67         2\n",
      "         104       0.00      0.00      0.00         2\n",
      "         105       0.67      1.00      0.80         2\n",
      "         106       0.50      1.00      0.67         2\n",
      "         107       0.67      1.00      0.80         2\n",
      "         108       1.00      1.00      1.00         2\n",
      "         109       1.00      1.00      1.00         2\n",
      "         110       1.00      0.50      0.67         2\n",
      "         111       1.00      1.00      1.00         2\n",
      "         112       0.50      0.50      0.50         2\n",
      "         113       1.00      0.50      0.67         2\n",
      "         114       1.00      1.00      1.00         2\n",
      "         115       0.67      1.00      0.80         2\n",
      "         116       0.50      0.50      0.50         2\n",
      "         117       0.33      0.50      0.40         2\n",
      "         118       0.50      1.00      0.67         2\n",
      "         119       0.67      1.00      0.80         2\n",
      "         120       1.00      1.00      1.00         2\n",
      "         121       1.00      1.00      1.00         2\n",
      "         122       0.00      0.00      0.00         2\n",
      "         123       1.00      0.50      0.67         2\n",
      "         124       0.67      1.00      0.80         2\n",
      "         125       1.00      1.00      1.00         2\n",
      "         126       0.33      0.50      0.40         2\n",
      "         127       1.00      1.00      1.00         2\n",
      "         128       0.67      1.00      0.80         2\n",
      "         129       0.67      1.00      0.80         2\n",
      "         130       0.14      0.50      0.22         2\n",
      "         131       1.00      1.00      1.00         2\n",
      "         132       1.00      1.00      1.00         2\n",
      "         133       1.00      1.00      1.00         2\n",
      "         134       1.00      1.00      1.00         2\n",
      "         135       1.00      0.50      0.67         2\n",
      "         136       0.17      0.50      0.25         2\n",
      "         137       1.00      1.00      1.00         2\n",
      "         138       0.67      1.00      0.80         2\n",
      "         139       1.00      0.50      0.67         2\n",
      "         140       1.00      1.00      1.00         2\n",
      "         141       1.00      0.50      0.67         2\n",
      "         142       1.00      0.50      0.67         2\n",
      "         143       0.67      1.00      0.80         2\n",
      "         144       0.50      1.00      0.67         2\n",
      "         145       1.00      1.00      1.00         2\n",
      "         146       0.67      1.00      0.80         2\n",
      "         147       1.00      1.00      1.00         2\n",
      "         148       1.00      1.00      1.00         2\n",
      "         149       1.00      0.50      0.67         2\n",
      "         150       0.50      0.50      0.50         2\n",
      "         151       1.00      0.50      0.67         2\n",
      "         152       0.50      0.50      0.50         2\n",
      "         153       0.25      1.00      0.40         2\n",
      "         154       1.00      1.00      1.00         2\n",
      "         155       1.00      1.00      1.00         2\n",
      "         156       0.67      1.00      0.80         2\n",
      "         157       0.40      1.00      0.57         2\n",
      "         158       1.00      1.00      1.00         2\n",
      "         159       1.00      1.00      1.00         2\n",
      "         160       1.00      1.00      1.00         2\n",
      "         161       0.67      1.00      0.80         2\n",
      "         162       0.00      0.00      0.00         2\n",
      "         163       0.50      1.00      0.67         2\n",
      "         164       1.00      1.00      1.00         2\n",
      "         165       0.33      1.00      0.50         2\n",
      "         166       0.25      1.00      0.40         2\n",
      "         167       1.00      0.50      0.67         2\n",
      "         168       1.00      1.00      1.00         2\n",
      "         169       1.00      1.00      1.00         2\n",
      "         170       1.00      0.50      0.67         2\n",
      "         171       0.67      1.00      0.80         2\n",
      "         172       0.50      1.00      0.67         2\n",
      "         173       1.00      0.50      0.67         2\n",
      "         174       1.00      0.50      0.67         2\n",
      "         175       0.40      1.00      0.57         2\n",
      "         176       1.00      0.50      0.67         2\n",
      "         177       1.00      1.00      1.00         2\n",
      "         178       1.00      0.50      0.67         2\n",
      "         179       1.00      1.00      1.00         2\n",
      "         180       0.67      1.00      0.80         2\n",
      "         181       0.67      1.00      0.80         2\n",
      "         182       1.00      0.50      0.67         2\n",
      "         183       1.00      1.00      1.00         2\n",
      "         184       0.67      1.00      0.80         2\n",
      "         185       0.50      0.50      0.50         2\n",
      "         186       1.00      1.00      1.00         2\n",
      "         187       1.00      1.00      1.00         2\n",
      "         188       0.67      1.00      0.80         2\n",
      "         189       1.00      1.00      1.00         2\n",
      "         190       1.00      1.00      1.00         2\n",
      "         191       1.00      1.00      1.00         2\n",
      "         192       0.50      0.50      0.50         2\n",
      "         193       1.00      1.00      1.00         2\n",
      "         194       0.00      0.00      0.00         2\n",
      "         195       1.00      1.00      1.00         2\n",
      "         196       1.00      1.00      1.00         2\n",
      "         197       1.00      1.00      1.00         2\n",
      "         198       1.00      1.00      1.00         2\n",
      "         199       1.00      1.00      1.00         2\n",
      "         200       1.00      1.00      1.00         2\n",
      "         201       0.00      0.00      0.00         2\n",
      "         202       0.00      0.00      0.00         2\n",
      "         203       1.00      0.50      0.67         2\n",
      "         204       1.00      1.00      1.00         2\n",
      "         205       1.00      1.00      1.00         2\n",
      "         206       1.00      1.00      1.00         2\n",
      "         207       1.00      0.50      0.67         2\n",
      "         208       0.00      0.00      0.00         2\n",
      "         209       1.00      0.50      0.67         2\n",
      "         210       1.00      0.50      0.67         2\n",
      "         211       0.00      0.00      0.00         2\n",
      "         212       1.00      0.50      0.67         2\n",
      "         213       0.67      1.00      0.80         2\n",
      "         214       1.00      1.00      1.00         2\n",
      "         215       1.00      0.50      0.67         2\n",
      "         216       0.50      1.00      0.67         2\n",
      "         217       1.00      0.50      0.67         2\n",
      "         218       0.33      0.50      0.40         2\n",
      "         219       0.67      1.00      0.80         2\n",
      "         220       1.00      0.50      0.67         2\n",
      "         221       0.50      0.50      0.50         2\n",
      "         222       1.00      0.50      0.67         2\n",
      "         223       1.00      0.50      0.67         2\n",
      "         224       1.00      1.00      1.00         2\n",
      "         225       1.00      1.00      1.00         2\n",
      "         226       1.00      0.50      0.67         2\n",
      "         227       1.00      0.50      0.67         2\n",
      "         228       1.00      0.50      0.67         2\n",
      "         229       1.00      1.00      1.00         2\n",
      "         230       1.00      1.00      1.00         2\n",
      "         231       1.00      1.00      1.00         2\n",
      "         232       1.00      1.00      1.00         2\n",
      "         233       1.00      0.50      0.67         2\n",
      "         234       1.00      1.00      1.00         2\n",
      "         235       1.00      1.00      1.00         2\n",
      "         236       0.67      1.00      0.80         2\n",
      "         237       1.00      1.00      1.00         2\n",
      "         238       1.00      1.00      1.00         2\n",
      "         239       1.00      1.00      1.00         2\n",
      "         240       0.00      0.00      0.00         2\n",
      "         241       1.00      0.50      0.67         2\n",
      "         242       0.00      0.00      0.00         2\n",
      "         243       1.00      1.00      1.00         2\n",
      "         244       1.00      1.00      1.00         2\n",
      "         245       1.00      0.50      0.67         2\n",
      "         246       1.00      1.00      1.00         2\n",
      "         247       1.00      1.00      1.00         2\n",
      "         248       1.00      1.00      1.00         2\n",
      "         249       1.00      1.00      1.00         2\n",
      "         250       1.00      1.00      1.00         2\n",
      "         251       1.00      1.00      1.00         2\n",
      "         252       1.00      0.50      0.67         2\n",
      "         253       0.67      1.00      0.80         2\n",
      "         254       0.00      0.00      0.00         2\n",
      "         255       1.00      0.50      0.67         2\n",
      "         256       0.00      0.00      0.00         2\n",
      "         257       1.00      1.00      1.00         2\n",
      "         258       0.00      0.00      0.00         2\n",
      "         259       0.67      1.00      0.80         2\n",
      "         260       0.50      1.00      0.67         2\n",
      "         261       1.00      1.00      1.00         2\n",
      "         262       0.67      1.00      0.80         2\n",
      "         263       1.00      1.00      1.00         2\n",
      "         264       0.33      0.50      0.40         2\n",
      "         265       0.33      0.50      0.40         2\n",
      "         266       1.00      0.50      0.67         2\n",
      "         267       1.00      0.50      0.67         2\n",
      "         268       0.50      0.50      0.50         2\n",
      "         269       1.00      1.00      1.00         2\n",
      "         270       1.00      0.50      0.67         2\n",
      "         271       0.00      0.00      0.00         2\n",
      "         272       1.00      1.00      1.00         2\n",
      "         273       1.00      0.50      0.67         2\n",
      "         274       1.00      1.00      1.00         2\n",
      "         275       0.00      0.00      0.00         2\n",
      "         276       1.00      0.50      0.67         2\n",
      "         277       1.00      1.00      1.00         2\n",
      "         278       1.00      0.50      0.67         2\n",
      "         279       0.50      1.00      0.67         2\n",
      "         280       1.00      1.00      1.00         2\n",
      "         281       1.00      1.00      1.00         2\n",
      "         282       0.50      0.50      0.50         2\n",
      "         283       1.00      1.00      1.00         2\n",
      "         284       1.00      1.00      1.00         2\n",
      "         285       1.00      0.50      0.67         2\n",
      "         286       0.40      1.00      0.57         2\n",
      "         287       1.00      1.00      1.00         2\n",
      "         288       1.00      0.50      0.67         2\n",
      "         289       0.67      1.00      0.80         2\n",
      "         290       0.50      0.50      0.50         2\n",
      "         291       0.33      0.50      0.40         2\n",
      "         292       1.00      1.00      1.00         2\n",
      "         293       1.00      0.50      0.67         2\n",
      "         294       1.00      0.50      0.67         2\n",
      "         295       0.67      1.00      0.80         2\n",
      "         296       1.00      1.00      1.00         2\n",
      "         297       0.50      1.00      0.67         2\n",
      "         298       1.00      1.00      1.00         2\n",
      "         299       1.00      0.50      0.67         2\n",
      "         300       1.00      1.00      1.00         2\n",
      "         301       0.50      0.50      0.50         2\n",
      "         302       1.00      0.50      0.67         2\n",
      "         303       0.50      0.50      0.50         2\n",
      "         304       1.00      0.50      0.67         2\n",
      "         305       1.00      1.00      1.00         2\n",
      "         306       1.00      1.00      1.00         2\n",
      "         307       0.67      1.00      0.80         2\n",
      "         308       1.00      1.00      1.00         2\n",
      "         309       1.00      1.00      1.00         2\n",
      "         310       0.50      0.50      0.50         2\n",
      "         311       1.00      0.50      0.67         2\n",
      "         312       1.00      1.00      1.00         2\n",
      "         313       0.67      1.00      0.80         2\n",
      "         314       1.00      1.00      1.00         2\n",
      "         315       1.00      0.50      0.67         2\n",
      "         316       1.00      1.00      1.00         2\n",
      "         317       1.00      0.50      0.67         2\n",
      "         318       1.00      1.00      1.00         2\n",
      "         319       0.67      1.00      0.80         2\n",
      "         320       0.50      1.00      0.67         2\n",
      "         321       1.00      1.00      1.00         2\n",
      "         322       0.00      0.00      0.00         2\n",
      "         323       1.00      1.00      1.00         2\n",
      "         324       0.67      1.00      0.80         2\n",
      "         325       1.00      0.50      0.67         2\n",
      "         326       1.00      1.00      1.00         2\n",
      "         327       0.50      1.00      0.67         2\n",
      "         328       1.00      0.50      0.67         2\n",
      "         329       0.00      0.00      0.00         2\n",
      "         330       0.50      0.50      0.50         2\n",
      "         331       0.00      0.00      0.00         2\n",
      "         332       1.00      1.00      1.00         2\n",
      "         333       1.00      1.00      1.00         2\n",
      "         334       1.00      0.50      0.67         2\n",
      "         335       1.00      0.50      0.67         2\n",
      "         336       0.67      1.00      0.80         2\n",
      "         337       1.00      1.00      1.00         2\n",
      "         338       0.29      1.00      0.44         2\n",
      "         339       1.00      1.00      1.00         2\n",
      "         340       0.00      0.00      0.00         2\n",
      "         341       1.00      0.50      0.67         2\n",
      "         342       0.50      0.50      0.50         2\n",
      "         343       1.00      1.00      1.00         2\n",
      "         344       1.00      1.00      1.00         2\n",
      "         345       1.00      1.00      1.00         2\n",
      "         346       1.00      1.00      1.00         2\n",
      "         347       1.00      0.50      0.67         2\n",
      "         348       1.00      0.50      0.67         2\n",
      "         349       1.00      0.50      0.67         2\n",
      "         350       1.00      0.50      0.67         2\n",
      "         351       1.00      0.50      0.67         2\n",
      "         352       1.00      1.00      1.00         2\n",
      "         353       1.00      0.50      0.67         2\n",
      "         354       1.00      1.00      1.00         2\n",
      "         355       0.67      1.00      0.80         2\n",
      "         356       1.00      1.00      1.00         2\n",
      "         357       1.00      1.00      1.00         2\n",
      "         358       1.00      1.00      1.00         2\n",
      "         359       0.00      0.00      0.00         2\n",
      "         360       1.00      0.50      0.67         2\n",
      "         361       1.00      1.00      1.00         2\n",
      "         362       0.50      0.50      0.50         2\n",
      "         363       1.00      1.00      1.00         2\n",
      "         364       0.67      1.00      0.80         2\n",
      "         365       1.00      1.00      1.00         2\n",
      "         366       0.00      0.00      0.00         2\n",
      "         367       1.00      1.00      1.00         2\n",
      "         368       0.40      1.00      0.57         2\n",
      "         369       1.00      1.00      1.00         2\n",
      "         370       1.00      0.50      0.67         2\n",
      "         371       0.33      0.50      0.40         2\n",
      "         372       0.25      0.50      0.33         2\n",
      "         373       0.67      1.00      0.80         2\n",
      "         374       0.67      1.00      0.80         2\n",
      "         375       1.00      1.00      1.00         2\n",
      "         376       0.67      1.00      0.80         2\n",
      "         377       0.33      0.50      0.40         2\n",
      "         378       1.00      0.50      0.67         2\n",
      "         379       1.00      1.00      1.00         2\n",
      "         380       0.00      0.00      0.00         2\n",
      "         381       1.00      1.00      1.00         2\n",
      "         382       0.50      0.50      0.50         2\n",
      "         383       0.00      0.00      0.00         2\n",
      "         384       0.33      0.50      0.40         2\n",
      "         385       1.00      1.00      1.00         2\n",
      "         386       1.00      1.00      1.00         2\n",
      "         387       1.00      1.00      1.00         2\n",
      "         388       1.00      0.50      0.67         2\n",
      "         389       0.50      0.50      0.50         2\n",
      "         390       1.00      0.50      0.67         2\n",
      "         391       1.00      1.00      1.00         2\n",
      "         392       1.00      1.00      1.00         2\n",
      "         393       0.67      1.00      0.80         2\n",
      "         394       1.00      0.50      0.67         2\n",
      "         395       0.67      1.00      0.80         2\n",
      "         396       1.00      0.50      0.67         2\n",
      "         397       0.50      0.50      0.50         2\n",
      "         398       0.25      0.50      0.33         2\n",
      "         399       1.00      1.00      1.00         2\n",
      "         400       1.00      1.00      1.00         2\n",
      "         401       1.00      1.00      1.00         2\n",
      "         402       1.00      1.00      1.00         2\n",
      "         403       0.00      0.00      0.00         2\n",
      "         404       1.00      1.00      1.00         2\n",
      "         405       1.00      0.50      0.67         2\n",
      "         406       1.00      0.50      0.67         2\n",
      "         407       1.00      0.50      0.67         2\n",
      "         408       1.00      1.00      1.00         2\n",
      "         409       1.00      0.50      0.67         2\n",
      "         410       1.00      1.00      1.00         2\n",
      "         411       1.00      1.00      1.00         2\n",
      "         412       0.67      1.00      0.80         2\n",
      "         413       1.00      0.50      0.67         2\n",
      "         414       1.00      1.00      1.00         2\n",
      "         415       1.00      0.50      0.67         2\n",
      "         416       1.00      1.00      1.00         2\n",
      "         417       1.00      1.00      1.00         2\n",
      "         418       1.00      0.50      0.67         2\n",
      "         419       1.00      1.00      1.00         2\n",
      "         420       1.00      1.00      1.00         2\n",
      "         421       1.00      1.00      1.00         2\n",
      "         422       1.00      1.00      1.00         2\n",
      "         423       1.00      1.00      1.00         2\n",
      "         424       1.00      0.50      0.67         2\n",
      "         425       1.00      1.00      1.00         2\n",
      "         426       1.00      1.00      1.00         2\n",
      "         427       0.67      1.00      0.80         2\n",
      "         428       1.00      1.00      1.00         2\n",
      "         429       0.67      1.00      0.80         2\n",
      "         430       1.00      1.00      1.00         2\n",
      "         431       0.40      1.00      0.57         2\n",
      "         432       1.00      1.00      1.00         2\n",
      "         433       1.00      1.00      1.00         2\n",
      "         434       0.00      0.00      0.00         2\n",
      "         435       1.00      0.50      0.67         2\n",
      "         436       0.67      1.00      0.80         2\n",
      "         437       1.00      0.50      0.67         2\n",
      "         438       0.67      1.00      0.80         2\n",
      "         439       1.00      1.00      1.00         2\n",
      "         440       1.00      1.00      1.00         2\n",
      "         441       1.00      1.00      1.00         2\n",
      "         442       1.00      0.50      0.67         2\n",
      "         443       0.17      0.50      0.25         2\n",
      "         444       1.00      0.50      0.67         2\n",
      "         445       0.67      1.00      0.80         2\n",
      "         446       1.00      1.00      1.00         2\n",
      "         447       1.00      1.00      1.00         2\n",
      "         448       0.40      1.00      0.57         2\n",
      "         449       1.00      0.50      0.67         2\n",
      "         450       0.67      1.00      0.80         2\n",
      "         451       1.00      0.50      0.67         2\n",
      "         452       1.00      1.00      1.00         2\n",
      "         453       0.67      1.00      0.80         2\n",
      "         454       1.00      0.50      0.67         2\n",
      "         455       1.00      1.00      1.00         2\n",
      "         456       1.00      1.00      1.00         2\n",
      "         457       1.00      0.50      0.67         2\n",
      "         458       1.00      1.00      1.00         2\n",
      "         459       1.00      1.00      1.00         2\n",
      "         460       1.00      0.50      0.67         2\n",
      "         461       0.00      0.00      0.00         2\n",
      "\n",
      "    accuracy                           0.76       924\n",
      "   macro avg       0.79      0.76      0.75       924\n",
      "weighted avg       0.79      0.76      0.75       924\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(report)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "save_report(report,'softmax_report.txt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAggAAAG2CAYAAAAa1H77AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBoElEQVR4nO3dfVwUdeIH8M8CsqCwC2qwoph2lspPRcOivR4tksrzIe2VeaZkZq8MTaUH5U4htcSztDKfSlPsLk+rSy/NKH6YmCc+oXQ+IHeWHqQuWCQrGCyy8/vDH3OuC7jLzu7M7Hzevub1ktnZme8M7O5nv0+jEwRBABEREdFVAuQuABERESkPAwIRERE5YUAgIiIiJwwIRERE5IQBgYiIiJwwIBAREZETBgQiIiJywoBAREREThgQiIiIyAkDAhERETnxm4CwfPlydOvWDSEhIUhMTMT+/fvlLhIREZHHdu3ahaFDhyImJgY6nQ5btmy57nN27tyJW2+9FXq9Hj169EB2drbbx/WLgLBp0yakpaUhMzMThw4dQnx8PJKTk1FRUSF30YiIiDxSU1OD+Ph4LF++3KXtT506hSFDhmDQoEEoKirC9OnT8cwzz+Crr75y67g6f7hZU2JiIm677TYsW7YMAGC32xEbG4upU6di1qxZMpeOiIhIGjqdDps3b8aIESOa3WbmzJn44osvcPToUXHdE088gQsXLiAnJ8flYwV5UlAlsNlsKCwsRHp6urguICAASUlJKCgocGkfdrsdZ8+eRXh4OHQ6nbeKSkREXiAIAi5evIiYmBgEBHivYry2thY2m02SfQmC4PR5o9frodfrPd53QUEBkpKSHNYlJydj+vTpbu1H9QHhp59+QkNDA6Kjox3WR0dH48SJE00+p66uDnV1deLPZ86cQVxcnFfLSURE3lVWVoYuXbp4Zd+1tbUIDe8AXL4kyf7CwsJQXV3tsC4zMxOvvvqqx/u2WCxNfiZarVb8+uuvCA0NdWk/qg8IrZGVlYW5c+c6rQ+OS0HZt0tlKBEREbXWRasVPbrHIjw83GvHsNlswOVL0MelAIHBnu2swYbq4+tRVlYGg8Egrpai9kBKqg8IHTt2RGBgIMrLyx3Wl5eXw2QyNfmc9PR0pKWliT9brVbExsai7NulmLvzRywextoEImrZi58f53uFwvikiTgoBDoPA4Kgu9IMYjAYHAKCVEwmU5OfiQaDweXaA8APRjEEBwcjISEBeXl54jq73Y68vDyYzeYmn6PX68VfzLW/oMXD4hB52xSvl5uI1I3hQKN0AHQ6DxfvFtFsNjt8JgJAbm5us5+JzVF9QACAtLQ0rF69GuvXr0dxcTEmT56MmpoaTJgwoVX7++XAMoYEIiJypguQZnFDdXU1ioqKUFRUBODKMMaioiKUlpYCuFIrPn78eHH75557Dj/88ANeeeUVnDhxAitWrMDHH3+MGTNmuHVcvwgIo0ePxptvvomMjAz0798fRUVFyMnJceqk4Y5fDizDi58fl7CURNrB1w6RdA4ePIgBAwZgwIABAK58KR4wYAAyMjIAAOfOnRPDAgB0794dX3zxBXJzcxEfH4/FixdjzZo1SE5Oduu4fjEPgqesViuMRiPKf65yag+KvG0KfjmwTKaSERHR9VitVkR3MKKqyvk9XMpjGI1G6Ac8D12gZ50JhYY61B1e4dXySsEvahC8SYk1CUorDxGRZsjQxCAXdZRSZouHxSnqQ5mdo8hfKel1RqR1DAgu4ugGIu9j+CXF83gEw/8vKsCA4AaObiAi0jopmhfU8dGrjlIqCEMCERFpAQNCKzAkEBFpFJsY6HrUNPSRHb+ImsfXB7mFoxjIVWqoSWDHL6Lm8fVB1DQGBA+xuYGISEPYxEDuYEggItIINjGQuxgSiIg0gDUI1BoMCURE5C8YECSmxHs3uEvt5Sci8ho2MZAn1D4tM3t1ExE1Q6eTICCwiUHT2NxARERqxoDgRf7Q3EBEpCSyv6cG6KRZVIABwctYXa9ssr/ZEJFbZH9PZR8EkhqbG5RJ9jcbIiKFYkDwEfZJICLyA5wHgbyBIYGISOXYxEDeoqa7QGqdv/dP8PfzIyLPMCDIhDUJyufv/RP8/fyIvIJNDORtbG4gIlIhNjGQL3CeBCIilWENAvmK2qdlJiIi/8SAoACsSSAiV/B9QgHYxEC+tnhYHF/8RNQidixVADYxkBzY3EBERErBgKAwHN1ARKRkUjQvqOOjVx2l1BiGBCIihWITA8mNIYGIiOTEgKBgLU3LzA6NRNrC17xC6HQSjGJgDQJJpKmaBPZmJtIWvuYVgsMcSUk4TwIRaQXf65SDAUElOASSiLRA8TUl7KRISsSaBCLt4WteYdjEQErFGRdJDfg3Kh3Ff6PWGtYgkJKxuYGUjh9qROrHgKBS/tLc4A/nQEQawiYGUgN/qEngN00iUhU2MZBacMZFIiLyBgYEP9DSjIv+gk0RysbfD2mFTqeTZFEDBgQ/4s81CWyKUDb+fkgrGBBIldjcQEREUmFA8DMMCUREXqSTaFEBBgQ/5C9DIImIlIZNDKR6/jAEkoiI5MOA4MfY3EBEJC3WIJDfkLq5gU0XRKRlDAgkOTk/WKW8wROHsxGRljEgkOTk/mBlnwQiInIHA4KGsE8CEZGHOMyR/BVDAhFR67GJgfwa50kgIqLrYUDQKPZJICJy35W7NXtagyD3WbiGAUFDrq01YE0CEZF7dJCgiUElnRAYEDSkqZEUUg6BJHnw90dE3sCAQGxuUDm5h9ASaQk7KZLmcHQDEZELOMyRtEiLfRK0dr5ERK5iQCAHWquu1tr5EsnFb2oopWheYBMDqZnfvJiJSBF+ObBM7iJIgn0QSPO02NxARHQ9DAhE4OgGIiKlWL58Obp164aQkBAkJiZi//79LW7/9ttvo2fPnggNDUVsbCxmzJiB2tpat47JgEAt4ugGIqKryDCKYdOmTUhLS0NmZiYOHTqE+Ph4JCcno6KiosntN2zYgFmzZiEzMxPFxcX44IMPsGnTJvzhD39w67gMCHRdDAlERFfI0cSwZMkSTJo0CRMmTEBcXBxWrVqFtm3bYu3atU1uv2fPHtx55534/e9/j27dumHw4MEYM2bMdWsdrsWAQC5hnwTyZ/zbJjlYrVaHpa6uzmkbm82GwsJCJCUliesCAgKQlJSEgoKCJvf729/+FoWFhWIg+OGHH7B9+3Y88sgjbpWPAYFcxj4J5K843JVcJWUNQmxsLIxGo7hkZWU5He+nn35CQ0MDoqOjHdZHR0fDYrE0Wcbf//73mDdvHu666y60adMGv/nNb3DfffexiYG8S0s1CVo5TyJynZQBoaysDFVVVeKSnp4uSRl37tyJBQsWYMWKFTh06BA+++wzfPHFF5g/f75b+5E1IOzatQtDhw5FTEwMdDodtmzZ4vC4IAjIyMhAp06dEBoaiqSkJPz73/922KayshJjx46FwWBAREQEJk6ciOrqah+ehfZopSaB3yqJyJsMBoPDotfrnbbp2LEjAgMDUV5e7rC+vLwcJpOpyf3OmTMH48aNwzPPPIO+ffvi0UcfxYIFC5CVlQW73e5y+WQNCDU1NYiPj8fy5cubfHzRokVYunQpVq1ahX379qFdu3ZITk52GKoxduxYHDt2DLm5udi2bRt27dqFZ5991lenoFnsuEhEWuTrTorBwcFISEhAXl6euM5utyMvLw9ms7nJ51y6dAkBAY4f74GBgQCufPF2VZDLW3rBww8/jIcffrjJxwRBwNtvv43Zs2dj+PDhAIAPP/wQ0dHR2LJlC5544gkUFxcjJycHBw4cwMCBAwEA7777Lh555BG8+eabiImJ8dm5aFFjSPCXGdKIiK5Lipstufn8tLQ0pKSkYODAgbj99tvx9ttvo6amBhMmTAAAjB8/Hp07dxb7MAwdOhRLlizBgAEDkJiYiJMnT2LOnDkYOnSoGBRcIWtAaMmpU6dgsVgcem4ajUYkJiaioKAATzzxBAoKChARESGGAwBISkpCQEAA9u3bh0cffVSOomvK03Oex4ufH2d1PBGRl4wePRrnz59HRkYGLBYL+vfvj5ycHLHjYmlpqUONwezZs6HT6TB79mycOXMGN9xwA4YOHYrXX3/dreMqNiA09s5sqeemxWJBVFSUw+NBQUFo3759s707AaCurs5hOInVapWq2H7BnQ/8xu0YEohIC6SYKrk1z58yZQqmTGm6WXfnzp0OPwcFBSEzMxOZmZmtKZ5Ik6MYsrKyHIaWxMbGyl0kRWnNB/3iYXHs9U9+gX/H1BLei0EBGntnttRz02QyOU01efnyZVRWVjbbuxMA0tPTHYaWlJWVSVx6bWJIIF/zxt8ba8KoJQwICtC9e3eYTCaHnptWqxX79u0Te26azWZcuHABhYWF4jY7duyA3W5HYmJis/vW6/VOw0tIGnxzJV9S2t+bGgOyGstMviFrH4Tq6mqcPHlS/PnUqVMoKipC+/bt0bVrV0yfPh2vvfYabr75ZnTv3h1z5sxBTEwMRowYAQDo3bs3HnroIUyaNAmrVq1CfX09pkyZgieeeIIjGGTG0Q2kRUoLLK5QY5llJcMoBrnIGhAOHjyIQYMGiT+npaUBAFJSUpCdnY1XXnkFNTU1ePbZZ3HhwgXcddddyMnJQUhIiPicjz76CFOmTMEDDzyAgIAAjBo1CkuXLvX5uZAjDoEkIn8kVydFOegEd2ZN8FNWqxVGoxHlP1exuUFiDAlE5G1WqxXRHYyoqvLee3jj50TnZ/+KgOC2Hu3LbruEM++P8Wp5paDYPgjkHzjjIhH5E3ZSJJKQWm/wpMYyE5F36SBBQFBJJwQGBPIJNd7giZ23iEjLGBDIZ9Rak0BE1IhNDEReosaaBCIikU6iRQUYEMjn2HGRiEj5GBBIFmxuIHINXyfKwiYGUhR/fYNgJ0Ci6+PrRFkYEEhR/P0Ngs0NRKQWOp00ixowIJDs2CeBiEh5GBBIERgSiEgNrtQAeNrEIPdZuIYBoRn+2u6vZLxnAxEp/r1XiuYFBgR18/d2fyVjTQKRdvG9VzkYEEhx2NxARErFUQxEMrt2ngTFVzsSkSZwFAORAlw9LTOrHYmIfIsBgRSNzQ1EpCQBATpJFjVgQCDF47TMRKQUbGIgUhjeBZKIyLcYEEg12NxARHLjKAYihWJIICI5sYmBSMHYJ4FIHnzdsQaBSPEWD4vjmxVRK3jyuuFwY21hQCDVYsdFIvfxQ94zrEEgcpNc3+bZ3EBEvsQ+CERukvNbCWsSiIikx4DgI/yW612sSSAiX9BBgiYGldzvmQHBR9ju533suEhE3sYmBiKVYnMDEZE0GBDI73AyJSLyFo5iIFI5hgQi8gY2MRD5AYYEIqLWY0Agv8bRDerF3xspEZsYiPwIRzeokxJG/vDvhq7FJgYiP8OQQK2hhJBCysIaBCI/5O2QwABCRP6EAYE0xZvzJPDbJpEGSNG8oI4KBAYE0h6ObiCi1mITA5GfY0ggImoZAwJpFkMCEbmLoxiINIIhgYjcwSYGIg1hSCAicsaAQASGBCJyDZsYiDTolwPL5C4Ckeaobf4QNjEQaRhrEoh8h/OHKBcDAtE12NxARM1hDQKRxjEkEFFT2AeBiNy6VbTa2lGJqHVYg0BEAFy/dwPbUYnI3zAgEF2HOzUJROTf2MRARA68eRdIIlIPNjEQkRN2XCQiLWFAIHIDmxuUi78X8gUdJGhikPskXMSAQOQmNjcoEzuKki8E6HSSLGrAgEDUCqxJ8D5eXyJ5MSAQtRJrEryLNQKkRBzFQEQuYcdFIm3hKAYichlDApF2BOikWdy1fPlydOvWDSEhIUhMTMT+/ftb3P7ChQtITU1Fp06doNfrccstt2D79u3unav7xSSiazEkEJG3bNq0CWlpacjMzMShQ4cQHx+P5ORkVFRUNLm9zWbDgw8+iNOnT+PTTz9FSUkJVq9ejc6dO7t1XAYEUi2ldWJjx0UiDdB53szg7jjHJUuWYNKkSZgwYQLi4uKwatUqtG3bFmvXrm1y+7Vr16KyshJbtmzBnXfeiW7duuHee+9FfHy8W8dlQCDVUmInNnZcJPJvUnZStFqtDktdXZ3T8Ww2GwoLC5GUlCSuCwgIQFJSEgoKCpos4+effw6z2YzU1FRER0ejT58+WLBgARoaGtw6VwYEIomxJoGIXBEbGwuj0SguWVlZTtv89NNPaGhoQHR0tMP66OhoWCyWJvf7ww8/4NNPP0VDQwO2b9+OOXPmYPHixXjttdfcKl+QW1sTkUsaaxJ+ObBM7qIQkYR0///P030AQFlZGQwGg7her9d7tN9GdrsdUVFReP/99xEYGIiEhAScOXMGb7zxBjIzM13eDwMCkZc0dlxkSCDyH60dhXDtPgDAYDA4BISmdOzYEYGBgSgvL3dYX15eDpPJ1ORzOnXqhDZt2iAwMFBc17t3b1gsFthsNgQHB7tWTpe2IqJW4egGIvJEcHAwEhISkJeXJ66z2+3Iy8uD2Wxu8jl33nknTp48CbvdLq7717/+hU6dOrkcDgAGBCKvY0gg8h9yTJSUlpaG1atXY/369SguLsbkyZNRU1ODCRMmAADGjx+P9PR0cfvJkyejsrIS06ZNw7/+9S988cUXWLBgAVJTU906rktNDJ9//rnLOxw2bJhbBSDSAjY3EPkHKaZKdvf5o0ePxvnz55GRkQGLxYL+/fsjJydH7LhYWlqKgID/ft+PjY3FV199hRkzZqBfv37o3Lkzpk2bhpkzZ7pXTkEQhOttdPWBW9yZTuf2MAolsFqtMBqNKP+56rrtQUSeePHz44ocniklLZwjKYvVakV0ByOqqrz3Ht74OfHI0m/QJjTMo33V/1qN7S8M8mp5peDSJ7/dbndpUWM4kBuHw2mLFj44tXCOpF283bOLamtrPTp4VlYWbrvtNoSHhyMqKgojRoxASUmJ0zFSU1PRoUMHhIWFYdSoUU69OUtLSzFkyBC0bdsWUVFRePnll3H58mWPyuYrfDPVJvZJIFIn3s2xBQ0NDZg/fz46d+6MsLAw/PDDDwCAOXPm4IMPPnBrX/n5+UhNTcXevXuRm5uL+vp6DB48GDU1NeI2M2bMwNatW/HJJ58gPz8fZ8+exciRIx3KM2TIENhsNuzZswfr169HdnY2MjIy3D01Ip9hx0UideLdHFvw+uuvIzs7G4sWLXIYLtGnTx+sWbPGrX3l5OTgqaeewv/8z/8gPj4e2dnZKC0tRWFhIQCgqqoKH3zwAZYsWYL7778fCQkJWLduHfbs2YO9e/cCAL7++mscP34cf/nLX9C/f388/PDDmD9/PpYvXw6bzebu6RH5DEMCESmZ2wHhww8/xPvvv4+xY8c6TMIQHx+PEydOeFSYqqoqAED79u0BAIWFhaivr3eYg7pXr17o2rWrOAd1QUEB+vbt6zANZXJyMqxWK44dO+ZReYi8jSGBSF3YxNCCM2fOoEePHk7r7XY76uvrW10Qu92O6dOn484770SfPn0AABaLBcHBwYiIiHDY9uo5qC0WS5NzVDc+1pS6ujqnm2QQyYUhgUg92EmxBXFxcfj222+d1n/66acYMGBAqwuSmpqKo0ePYuPGja3eh6uysrIcbpARGxvr9WOSa7Q6qoPzIxBdodX3ACVyOyBkZGRgypQp+NOf/gS73Y7PPvsMkyZNwuuvv97qjoFTpkzBtm3b8M0336BLly7iepPJBJvNhgsXLjhsf/Uc1CaTqck5qhsfa0p6ejqqqqrEpaysrFXllpIWXxRNnTNHdRBpm9LfA3QSLWrgdkAYPnw4tm7div/93/9Fu3btkJGRgeLiYmzduhUPPvigW/sSBAFTpkzB5s2bsWPHDnTv3t3h8YSEBLRp08ZhDuqSkhKUlpaKc1CbzWYcOXIEFRUV4ja5ubkwGAyIi2v6D02v14s3yXDlZhm+oPQXhTdo8ZxdweYGIuXS0iiGVt3N8e6770Zubq7HB09NTcWGDRvw97//HeHh4WKfAaPRiNDQUBiNRkycOBFpaWlo3749DAYDpk6dCrPZjDvuuAMAMHjwYMTFxWHcuHFYtGgRLBYLZs+ejdTUVMlunUnkS5yWmYiUoNW3ez548CCKi4sBXOmXkJCQ4PY+Vq5cCQC47777HNavW7cOTz31FADgrbfeQkBAAEaNGoW6ujokJydjxYoV4raBgYHYtm0bJk+eDLPZjHbt2iElJQXz5s1r3YkRKQBDApEySXm7Z6Vz6V4MV/vxxx8xZswY/OMf/xBHF1y4cAG//e1vsXHjRoc+BGqhtXsxcK589eDviuj6fHkvhsff3y3JvRg+fvYu/7gXw9WeeeYZ1NfXo7i4GJWVlaisrERxcTHsdjueeeYZb5SRJMYPHPVYPCxOkx1YAW123CVSErcDQn5+PlauXImePXuK63r27Il3330Xu3btkrRwRKTdkMAg631a/LuSghYmSQJaERBiY2ObnBCpoaEBMTExkhSK1IFvLr7DD0vv0urfMv+u3KelUQxuB4Q33ngDU6dOxcGDB8V1Bw8exLRp0/Dmm29KWjhSNr65+J5WP8hay9Xrxb9lclVjJ0VPFzVwaRRDZGSkQ+KpqalBYmIigoKuPP3y5csICgrC008/jREjRniloER05YOMoxtcxw9+otZzKSC8/fbbXi4GkTZIMSrhlwPLOLqBSCZSNBGopYnBpYCQkpLi7XIQaYJUH+qsSSCShxRTJasjHrSiD8LVamtrNX9XRLYJk1waaxKIiLzB7YBQU1ODKVOmICoqCu3atUNkZKTDojWs5iU5NdYkEJFv8HbPLXjllVewY8cOrFy5Enq9HmvWrMHcuXMRExODDz/80BtlJFIcJX1zZ00Cke94OgeCmuZCcDsgbN26FStWrMCoUaMQFBSEu+++G7Nnz8aCBQvw0UcfeaOMRLJo6UNXaTVHWp1MiYi8x+2AUFlZiZtuugkAYDAYUFlZCQC46667OJMi+RWlhYDrYUgg8j5OlNSCm266CadOnQIA9OrVCx9//DGAKzULjTdvIiJ5sE8CkXexiaEFEyZMwHfffQcAmDVrFpYvX46QkBDMmDEDL7/8suQFJCL3NN4qmojIEy7Ng3C1GTNmiP9PSkrCiRMnUFhYiB49eqBfv36SFo6IWoeTKSkbfzfqJcUoBLWMYnA7IFzrxhtvxI033ihFWYhIQo19EvhBpDz8naiXFE0EKskHrgWEpUuXurzDF154odWFISJpccZFImlxquVrvPXWWy7tTKfTMSAQKUxjnwSGBCJyh0sBoXHUAhGpE0MCkTQC4OE9CiR4vq+opZxE5CGObiDyHOdBICK/xJBARK5iQCDSGIYEotbT6YAADxeVVCAwIBBpEUMCUet4Gg4aFzVgQCDSKIYEImpJqwLCt99+iyeffBJmsxlnzpwBAPz5z3/G7t27JS0cEXkXQwKRe9hJsQV/+9vfkJycjNDQUBw+fBh1dXUAgKqqKixYsEDyAqqFlu6ip6Vz1QIOfSRyHZsYWvDaa69h1apVWL16Ndq0aSOuv/POO3Ho0CFJC6cmWpo61V/OlUHHEa8HEV3N7YBQUlKCe+65x2m90WjEhQsXpCgTKZS/fYD4S9CRij9fD3/72yX58HbPLTCZTDh58qTT+t27d+Omm26SpFCkTP78AUL/5Y99Evi3S1JpvJujp4sauB0QJk2ahGnTpmHfvn3Q6XQ4e/YsPvroI7z00kuYPHmyN8pILuK3JJJC462iichZgESLGrh9u+dZs2bBbrfjgQcewKVLl3DPPfdAr9fjpZdewtSpU71RRnIRvyWRVHgXSCJyO8jodDr88Y9/RGVlJY4ePYq9e/fi/PnzmD9/vjfKR0Qy4RBIImda6oPgdg1Co+DgYMTF8RsrkT/jXSCJHAXA8z4EAVBHQnA7IAwaNKjFSR527NjhUYGISFkYEoi0ye2A0L9/f4ef6+vrUVRUhKNHjyIlJUWqchGRgjAkEF0hRROB3zYxvPXWW02uf/XVV1FdXe1xgYhImRpHN8jVGVbOYxM1kmImRL+dSbE5Tz75JNauXSvV7shH1DycTc1lVys5P6AZDoh8S7KAUFBQgJCQEKl2Rz7CN11qDYYz0iqdzvPJkvy2iWHkyJEOPwuCgHPnzuHgwYOYM2eOZAXzZ6wqlUZz15DX1/t4fUmr2AehBUaj0eHngIAA9OzZE/PmzcPgwYMlK5g/45urd/H6+g47LhL5L7cCQkNDAyZMmIC+ffsiMjLSW2UiIpXg6AbSGnZSbEZgYCAGDx7MuzYSkYgzLpKW6CT6pwZud1Ls06cPfvjhB2+UhYhUiiGBtKKxBsHTRQ3cDgivvfYaXnrpJWzbtg3nzp2D1Wp1WIhImxgSiPyLywFh3rx5qKmpwSOPPILvvvsOw4YNQ5cuXRAZGYnIyEhERESwXwJJikPp1Ie3iiZ/p6UaBJc7Kc6dOxfPPfccvvnmG2+Wh0h09WgEDl1Uj8XD4vj7Ir+l0+lavB+Rq/tQA5cDgiAIAIB7773Xa4Uhag4/bNSFIYFI/dzqg6CW1ENE8msMCdfDJglSEzYxNOOWW265bkiorKz0qEBE5D8WD4u77jwJrGUgNeFMis2YO3eu00yKREQtkfsukFJQe/mJWsOtgPDEE08gKirKW2Uh4huxn1L771RJ5edrRF6NN1zydB9q4HIfBPY/IF/gG59/4zwJnuNrRF5y9UFYvnw5unXrhpCQECQmJmL//v0uPW/jxo3Q6XQYMWKE28d0OSA0jmIgImotTqZE5L5NmzYhLS0NmZmZOHToEOLj45GcnIyKiooWn3f69Gm89NJLuPvuu1t1XJcDgt1uZ/OCQrDXt//Swu+WN3YiVdP9t6Niaxd3b8WwZMkSTJo0CRMmTEBcXBxWrVqFtm3bYu3atc0+p6GhAWPHjsXcuXNx0003tepU3Z5qmeTHKkb/paXfrRbCELlP6X8XAdBJsgBwulVBXV2d0/FsNhsKCwuRlJT03zIEBCApKQkFBQXNlnPevHmIiorCxIkTPThXIiIZNA6BJLqa0kOyp7UHVw+TjI2NhdFoFJesrCyn4/30009oaGhAdHS0w/ro6GhYLJYmy7h792588MEHWL16tUfn6tYoBiIiKTX2SWCzA2lRWVkZDAaD+LNer/d4nxcvXsS4ceOwevVqdOzY0aN9MSAQkawYEkhNpJgJsfH5BoPBISA0pWPHjggMDER5ebnD+vLycphMJqftv//+e5w+fRpDhw4V19ntdgBAUFAQSkpK8Jvf/Ma1crq0FRGRF3F0A6lF4zwIni6uCg4ORkJCAvLy8sR1drsdeXl5MJvNTtv36tULR44cQVFRkbgMGzYMgwYNQlFREWJjY10+NmsQiEgR/GHGRSJvSEtLQ0pKCgYOHIjbb78db7/9NmpqajBhwgQAwPjx49G5c2dkZWUhJCQEffr0cXh+REQEADitvx4GBCJSDFfu3UAkJznuxTB69GicP38eGRkZsFgs6N+/P3JycsSOi6WlpQgIkL5BQCdwBiRYrVYYjUaU/1x13fYgT/DbEZFr+Fohd1itVkR3MKKqynvv4Y2fE+/mHUVoWLhH+/q1+iKmPtDHq+WVAvsg+BDf8IhcwyGQRPJjQCAiRWLHRVIiKedBUDoGBCJSLIYEUpoAiRY1UEs5iUijGkc3kLrxd6g+DAjkd/hG5H8WD4vj71Xl/KUPlk6nk2RRAwYE8jv+8kZEjthxkZRAJ9GiBgwIRKQabG4gufl6JkU5yRoQVq5ciX79+onzUZvNZnz55Zfi47W1tUhNTUWHDh0QFhaGUaNGOc1HXVpaiiFDhqBt27aIiorCyy+/jMuXL/v6VIjIR1iTQOQbsgaELl26YOHChSgsLMTBgwdx//33Y/jw4Th27BgAYMaMGdi6dSs++eQT5Ofn4+zZsxg5cqT4/IaGBgwZMgQ2mw179uzB+vXrkZ2djYyMDLlOiYh8gKMbSE5aaF4AFDiTYvv27fHGG2/gscceww033IANGzbgscceAwCcOHECvXv3RkFBAe644w58+eWX+N3vfoezZ8+KU06uWrUKM2fOxPnz5xEcHOzSMX01kyIRSYvTMhPg25kUV+cfR1sPZ1K8VH0Rk+6N40yKrmpoaMDGjRtRU1MDs9mMwsJC1NfXIykpSdymV69e6Nq1KwoKCgAABQUF6Nu3rxgOACA5ORlWq1WshSBqDbZzqwP7JBB5j+w3azpy5AjMZjNqa2sRFhaGzZs3Iy4uDkVFRQgODhbvQtUoOjoaFosFAGCxWBzCQePjjY81p66uDnV1deLPVqtVorMhf8GREOrBGzyRL0kxTJHDHF3Us2dPFBUVYd++fZg8eTJSUlJw/Lh3vxFkZWXBaDSKizv3x24Ov8UQyYc1CeQrnEnRh4KDg9GjRw8kJCQgKysL8fHxeOedd2AymWCz2XDhwgWH7cvLy2EymQAAJpPJaVRD48+N2zQlPT0dVVVV4lJWVubxefAbJ5G8OJmSf+LvVD6yB4Rr2e121NXVISEhAW3atEFeXp74WElJCUpLS2E2mwEAZrMZR44cQUVFhbhNbm4uDAYD4uKa/8DW6/Xi0MrGhaTHFzb5GkOC/1Haly8tzaQoax+E9PR0PPzww+jatSsuXryIDRs2YOfOnfjqq69gNBoxceJEpKWloX379jAYDJg6dSrMZjPuuOMOAMDgwYMRFxeHcePGYdGiRbBYLJg9ezZSU1Oh1+vlPDWC8l7YpA3sk0DeJMVQRXXEA5kDQkVFBcaPH49z587BaDSiX79++Oqrr/Dggw8CAN566y0EBARg1KhRqKurQ3JyMlasWCE+PzAwENu2bcPkyZNhNpvRrl07pKSkYN68eXKdEhEpQOM8CQwJRK2nuHkQ5MB5EIj8E0OCNvhyHoT1u0skmQch5a6enAeBiEgunHGRpMZRDEREfkJLQyC1cp5y0lInRQYEIlI0KT70tDK6gR2DSUoMCESkaFJ96PEukCQFT2/UpKYbNjEgEJFmsE8CeUqnk2ZRAwYEoiZooTpaq7TUJ4HIEwwIRE1gW65/Y3MDtVYAdJIsasCAQESaxJoEag02MRARaQBrEoiax4BARJrGjovkDp1E/9SAAYGINI8hgVzFJgYiYvu0xvCeDUSOGBCImsGRDNrEmgRqiU6CEQxsYiBV47dn0iqObqCWsImBNI/fnknLOLqBmsOAQESkcey4SFrHgEBEslJydb7SOi4q+VppBYc5EikA3wy1QQ3NWUr5W1TDtfJ3ATppFjVgQCDFuvrNkFW9JCd+MJMWMSCQKiitqpe0iUGV2MRARERO5B4CqZSmDi3jKAYiolby9w+xxcPiZDtHNnWQLzEgEJGktPAhxnkStEsHKZoZ1IEBgYioFThPgjZxFAMREV0XQwL5MwYEIvKIv/c5uB6OsNEWjmIgInKRFvocuELrQUkrOIqB/AbftIh8Q87RDeQ7OokWNWBA8HP8dkfkOxzdQP6EAYGISELsuOjfAqBDgM7DRSV1CAwIREQSY0jwX2xiICK2J5NH5J6WmchTDAhexjcI9WL/DfIU/4b8kIaqEBgQvIxvEETELwr+g/MgEF2Db3BErcchkKRGDAjkEtaEEHmGQyD9hBSTJKmjAoEBgYjUS23fytlxUf001AWBAYGI1EuNNVusSSC1YEAgIvIxzpOgYhqqQmBAICKSAUOCOnEUAxEReR1Dgvrwbo5EROQTcnRcZEdJcgUDAhGRzHzdcVGNnTuVQkNdEBgQiIiUgEMgVUJDCYEBgYhIITgEkpSEAYGISEHYcVHZ5BrFsHz5cnTr1g0hISFITEzE/v37m9129erVuPvuuxEZGYnIyEgkJSW1uH1zGBBI8Vjtqh78XUnjlwPL5C4CNUOOUQybNm1CWloaMjMzcejQIcTHxyM5ORkVFRVNbr9z506MGTMG33zzDQoKChAbG4vBgwfjzJkz7p2rIAiCe0X1P1arFUajEeU/V8FgMMhdHCIiAEDkbVMYFlxgtVoR3cGIqirvvYc3fk58e/RHhIV7dozqi1bc3aeLy+VNTEzEbbfdhmXLrvwt2O12xMbGYurUqZg1a9Z1n9/Q0IDIyEgsW7YM48ePd7mcrEEgIlIoNjcoj5R9FK1Wq8NSV1fndDybzYbCwkIkJSWJ6wICApCUlISCggKXynzp0iXU19ejffv2bp0rAwIRkYJxdIPCSJgQYmNjYTQaxSUrK8vpcD/99BMaGhoQHR3tsD46OhoWi8WlIs+cORMxMTEOIcMVQW5tTSSxFz8/zjHZRNexeFgcXyt+qKyszKGJQa/XS36MhQsXYuPGjdi5cydCQkLcei5rEEhWfMMjpVPKt/fGkEDyknIUg8FgcFiaCggdO3ZEYGAgysvLHdaXl5fDZDK1WNY333wTCxcuxNdff41+/fq5fa4MCERELVBSiOU8CfLz9SiG4OBgJCQkIC8vT1xnt9uRl5cHs9nc7PMWLVqE+fPnIycnBwMHDmzVuTIgEBGpCDsuykuOiRTT0tKwevVqrF+/HsXFxZg8eTJqamowYcIEAMD48eORnp4ubv+nP/0Jc+bMwdq1a9GtWzdYLBZYLBZUV1e7dVz2QSAiUpnGkMAhkNowevRonD9/HhkZGbBYLOjfvz9ycnLEjoulpaUICPjv9/2VK1fCZrPhsccec9hPZmYmXn31VZePy3kQwHkQ1IAdtIic8XVxhS/nQSgoPiPJPAjm3p29Wl4psImBVIFvgqRVLXVMZMdF35NrqmU5sImBiEjBWgrHbGYgb2INAhGRSl0dDthx0TfkuBeDXBgQiIj8AGdc9A05RjHIhQGBNI1vqORP2FeHpMSAQJrGN1TyR2xu8CINVSEwIBAR+RlOpuQ9WhrFwIBAROSHGBLIUwwIRKQ67DviGnZclB5HMRARKRj7jrhO7ZMpKa3sGuqCwIBAROTv1HwXSMWFQQ0lBAYEIiINYJ8EchcDAhGRRjAkeI6jGGSwcOFC6HQ6TJ8+XVxXW1uL1NRUdOjQAWFhYRg1ahTKy8sdnldaWoohQ4agbdu2iIqKwssvv4zLly/7uPREROrAkOAhKTooqiMfKCMgHDhwAO+99x769evnsH7GjBnYunUrPvnkE+Tn5+Ps2bMYOXKk+HhDQwOGDBkCm82GPXv2YP369cjOzkZGRoavT4HIgdI6VhFdjaMbyBWyB4Tq6mqMHTsWq1evRmRkpLi+qqoKH3zwAZYsWYL7778fCQkJWLduHfbs2YO9e/cCAL7++mscP34cf/nLX9C/f388/PDDmD9/PpYvXw6bzSbXKREpr2MV0TXUPrpBLhrqoyh/QEhNTcWQIUOQlJTksL6wsBD19fUO63v16oWuXbuioKAAAFBQUIC+ffsiOjpa3CY5ORlWqxXHjh3zzQkQyYRv7uQphoRW0FBCCJLz4Bs3bsShQ4dw4MABp8csFguCg4MRERHhsD46OhoWi0Xc5upw0Ph442PNqaurQ11dnfiz1Wpt7SkQyYa1FCSFxiGQV986mgiQsQahrKwM06ZNw0cffYSQkBCfHjsrKwtGo1FcYmNjfXp8IiIlYcdF13EUgw8UFhaioqICt956K4KCghAUFIT8/HwsXboUQUFBiI6Ohs1mw4ULFxyeV15eDpPJBAAwmUxOoxoaf27cpinp6emoqqoSl7KyMmlPjohIZRgSXMOpln3ggQcewJEjR1BUVCQuAwcOxNixY8X/t2nTBnl5eeJzSkpKUFpaCrPZDAAwm804cuQIKioqxG1yc3NhMBgQF9d89ater4fBYHBYyP+wbZU8pbW/ITYz0NVk64MQHh6OPn36OKxr164dOnToIK6fOHEi0tLS0L59exgMBkydOhVmsxl33HEHAGDw4MGIi4vDuHHjsGjRIlgsFsyePRupqanQ6/U+PydSFrbRk6e0+jf04ufHFXXuSiqPFH0MVVKBIP8ohpa89dZb+N3vfodRo0bhnnvugclkwmeffSY+HhgYiG3btiEwMBBmsxlPPvkkxo8fj3nz5slYav+ntW9VRFqjtNENSgkHADQ1ikEnCIIgdyHkZrVaYTQaUf5zVaubG5SUcImIpKCW9zWr1YroDkZUVbX+PdyVYxiNRhw5VYHwcM+OcfGiFX27R3m1vFJQdA2CmqjhRURE5A413wWSPMeAQEREzeLoBkc6SDCKQe6TcBEDAhERtYgh4b801AWBAYGIiK6PIUF7GBCIiDTMndEKvAskJ0oiIiJqktKGQPqedhoZGBCIiDSsNSOwOLpBGxgQiIjIbVrtk8AmBiJqkrarVokcabFPgnYaGBgQiNzCCbGIHLG5wX8xIBARkUe01NzAJgYiIiI3aCUk6CT6pwYMCEREJAlNhAQNdUJgQCAiIsloIiRoBAMCERFJyp9DgoYqEBgQiIhIev4aEthJkYiIyEP+GhK0ggGBiIi8xt9CAkcxEBERScSvQoKGOiEwIBARkdf5VUjQCAYEIiLyCX8ICRqqQGBAICIi31H7DZ44ioGIiMhLeIMndWBAIPp/av5WQ6Q26q1JkGIEgzqqEBgQiP4fb+VM5FtqrElgEwMREZEP+EPHRX/FgEBERLJiSFAmBgQiIpKdWvoksImBSEZqeJMgIuktHhan+Nc/p1omkhE7CxJplxo7LvorBgQiIlIUJfdJYBMDERGRjJQaEjjVMhERkcyUGhK0ggGBiIgUS3EhQUNVCAwIJFJ672Ei0iYlDYHkKAbSJI4eICKl4ugG32NAICIiVVBCcwNHMRARESmQ3CFBQ10QGBCIiEhdZA0JGkoIDAgapJTOPkREraWkjou+sHz5cnTr1g0hISFITEzE/v37W9z+k08+Qa9evRASEoK+ffti+/btbh+TAUGD2BmRiPyBHB0X5RjFsGnTJqSlpSEzMxOHDh1CfHw8kpOTUVFR0eT2e/bswZgxYzBx4kQcPnwYI0aMwIgRI3D06FH3zlUQBMGtZ/ghq9UKo9GI8p+rYDAY5C4OkUte/Pw4wx4RgKkb92PNuERUVXnvPVzKzwmr1YroDkaXy5uYmIjbbrsNy5YtAwDY7XbExsZi6tSpmDVrltP2o0ePRk1NDbZt2yauu+OOO9C/f3+sWrXK5XIGubylH2vMSBetVplLQuS6zPu6wMq/WSLMuisGa/Df93JvkuI117iPa/el1+uh1+sd1tlsNhQWFiI9PV1cFxAQgKSkJBQUFDS5/4KCAqSlpTmsS05OxpYtW9wqJwMCgJ9//hkA0KN7rMwlISKi1rp48SKMRqNX9h0cHAyTyYSbJfqcCAsLQ2ys474yMzPx6quvOqz76aef0NDQgOjoaIf10dHROHHiRJP7tlgsTW5vsVjcKiMDAoD27dsDAEpLS732x+XPrFYrYmNjUVZWxiaaVuD18wyvn2f84foJgoCLFy8iJibGa8cICQnBqVOnYLPZJNmfIAjQXTMhwrW1B3JjQMCV6hoAMBqNqn2BKIHBYOD18wCvn2d4/Tyj9uvniy93ISEhCAkJ8fpxrtaxY0cEBgaivLzcYX15eTlMJlOTzzGZTG5t3xyOYiAiIlKo4OBgJCQkIC8vT1xnt9uRl5cHs9nc5HPMZrPD9gCQm5vb7PbNYQ0CERGRgqWlpSElJQUDBw7E7bffjrfffhs1NTWYMGECAGD8+PHo3LkzsrKyAADTpk3Dvffei8WLF2PIkCHYuHEjDh48iPfff9+t4zIg4Eq7T2ZmpuLaf9SC188zvH6e4fXzDK+f8o0ePRrnz59HRkYGLBYL+vfvj5ycHLEjYmlpqdhUDgC//e1vsWHDBsyePRt/+MMfcPPNN2PLli3o06ePW8flPAhERETkhH0QiIiIyAkDAhERETlhQCAiIiInDAhERETkhAEB7t9GUwt27dqFoUOHIiYmBjqdzmkOb0EQkJGRgU6dOiE0NBRJSUn497//7bBNZWUlxo4dC4PBgIiICEycOBHV1dU+PAv5ZGVl4bbbbkN4eDiioqIwYsQIlJSUOGxTW1uL1NRUdOjQAWFhYRg1apTT5CalpaUYMmQI2rZti6ioKLz88su4fPmyL09FFitXrkS/fv3EyXvMZjO+/PJL8XFeO/csXLgQOp0O06dPF9fxGtL1aD4guHsbTa2oqalBfHw8li9f3uTjixYtwtKlS7Fq1Srs27cP7dq1Q3JyMmpra8Vtxo4di2PHjiE3Nxfbtm3Drl278Oyzz/rqFGSVn5+P1NRU7N27F7m5uaivr8fgwYNRU1MjbjNjxgxs3boVn3zyCfLz83H27FmMHDlSfLyhoQFDhgyBzWbDnj17sH79emRnZyMjI0OOU/KpLl26YOHChSgsLMTBgwdx//33Y/jw4Th27BgAXjt3HDhwAO+99x769evnsJ7XkK5L0Ljbb79dSE1NFX9uaGgQYmJihKysLBlLpSwAhM2bN4s/2+12wWQyCW+88Ya47sKFC4Jerxf++te/CoIgCMePHxcACAcOHBC3+fLLLwWdTiecOXPGZ2VXioqKCgGAkJ+fLwjClevVpk0b4ZNPPhG3KS4uFgAIBQUFgiAIwvbt24WAgADBYrGI26xcuVIwGAxCXV2db09AASIjI4U1a9bw2rnh4sWLws033yzk5uYK9957rzBt2jRBEPj3R67RdA1C4200k5KSxHXXu40mAadOnYLFYnG4bkajEYmJieJ1KygoQEREBAYOHChuk5SUhICAAOzbt8/nZZZbVVUVgP/eGKywsBD19fUO17BXr17o2rWrwzXs27evw13ZkpOTYbVaxW/SWtDQ0ICNGzeipqYGZrOZ184NqampGDJkiMO1Avj3R67R9EyKrbmNJkG8ZWhLtxO1WCyIiopyeDwoKAjt27d3+5ajame32zF9+nTceeed4kxmFosFwcHBiIiIcNj22mvY1DVufMzfHTlyBGazGbW1tQgLC8PmzZsRFxeHoqIiXjsXbNy4EYcOHcKBAwecHuPfH7lC0wGByBdSU1Nx9OhR7N69W+6iqErPnj1RVFSEqqoqfPrpp0hJSUF+fr7cxVKFsrIyTJs2Dbm5uT6/+yD5D003MbTmNpoE8dq0dN1MJpNTR8/Lly+jsrJSU9d2ypQp2LZtG7755ht06dJFXG8ymWCz2XDhwgWH7a+9hk1d48bH/F1wcDB69OiBhIQEZGVlIT4+Hu+88w6vnQsKCwtRUVGBW2+9FUFBQQgKCkJ+fj6WLl2KoKAgREdH8xrSdWk6ILTmNpoEdO/eHSaTyeG6Wa1W7Nu3T7xuZrMZFy5cQGFhobjNjh07YLfbkZiY6PMy+5ogCJgyZQo2b96MHTt2oHv37g6PJyQkoE2bNg7XsKSkBKWlpQ7X8MiRIw5BKzc3FwaDAXFxcb45EQWx2+2oq6vjtXPBAw88gCNHjqCoqEhcBg4ciLFjx4r/5zWk65K7l6TcNm7cKOj1eiE7O1s4fvy48OyzzwoREREOPXe16OLFi8Lhw4eFw4cPCwCEJUuWCIcPHxb+85//CIIgCAsXLhQiIiKEv//978I///lPYfjw4UL37t2FX3/9VdzHQw89JAwYMEDYt2+fsHv3buHmm28WxowZI9cp+dTkyZMFo9Eo7Ny5Uzh37py4XLp0SdzmueeeE7p27Srs2LFDOHjwoGA2mwWz2Sw+fvnyZaFPnz7C4MGDhaKiIiEnJ0e44YYbhPT0dDlOyadmzZol5OfnC6dOnRL++c9/CrNmzRJ0Op3w9ddfC4LAa9caV49iEAReQ7o+zQcEQRCEd999V+jatasQHBws3H777cLevXvlLpLsvvnmGwGA05KSkiIIwpWhjnPmzBGio6MFvV4vPPDAA0JJSYnDPn7++WdhzJgxQlhYmGAwGIQJEyYIFy9elOFsfK+pawdAWLdunbjNr7/+Kjz//PNCZGSk0LZtW+HRRx8Vzp0757Cf06dPCw8//LAQGhoqdOzYUXjxxReF+vp6H5+N7z399NPCjTfeKAQHBws33HCD8MADD4jhQBB47Vrj2oDAa0jXw9s9ExERkRNN90EgIiKipjEgEBERkRMGBCIiInLCgEBEREROGBCIiIjICQMCEREROWFAICIiIicMCEQK8dRTT2HEiBHiz/fddx+mT5/u83Ls3LkTOp3OaZ7+q+l0OmzZssXlfb766qvo37+/R+U6ffo0dDodioqKPNoPEbmGAYGoBU899RR0Oh10Op1486B58+bh8uXLXj/2Z599hvnz57u0rSsf6kRE7uDtnomu46GHHsK6detQV1eH7du3IzU1FW3atEF6errTtjabDcHBwZIct3379pLsh4ioNViDQHQder0eJpMJN954IyZPnoykpCR8/vnnAP7bLPD6668jJiYGPXv2BACUlZXh8ccfR0REBNq3b4/hw4fj9OnT4j4bGhqQlpaGiIgIdOjQAa+88gqunfX82iaGuro6zJw5E7GxsdDr9ejRowc++OADnD59GoMGDQIAREZGQqfT4amnngJw5Q6IWVlZ6N69O0JDQxEfH49PP/3U4Tjbt2/HLbfcgtDQUAwaNMihnK6aOXMmbrnlFrRt2xY33XQT5syZg/r6eqft3nvvPcTGxqJt27Z4/PHHUVVV5fD4mjVr0Lt3b4SEhKBXr15YsWKF22UhImkwIBC5KTQ0FDabTfw5Ly8PJSUlyM3NxbZt21BfX4/k5GSEh4fj22+/xT/+8Q+EhYXhoYceEp+3ePFiZGdnY+3atdi9ezcqKyuxefPmFo87fvx4/PWvf8XSpUtRXFyM9957D2FhYYiNjcXf/vY3AFdu2Xvu3Dm88847AICsrCx8+OGHWLVqFY4dO4YZM2bgySefRH5+PoArQWbkyJEYOnQoioqK8Mwzz2DWrFluX5Pw8HBkZ2fj+PHjeOedd7B69Wq89dZbDtucPHkSH3/8MbZu3YqcnBwcPnwYzz//vPj4Rx99hIyMDLz++usoLi7GggULMGfOHKxfv97t8hCRBGS+WRSRoqWkpAjDhw8XBOHKHSxzc3MFvV4vvPTSS+Lj0dHRQl1dnficP//5z0LPnj0Fu90urqurqxNCQ0OFr776ShAEQejUqZOwaNEi8fH6+nqhS5cu4rEEwfHueyUlJQIAITc3t8lyNt5985dffhHX1dbWCm3bthX27NnjsO3EiRPF226np6cLcXFxDo/PnDnTaV/XAiBs3ry52cffeOMNISEhQfw5MzNTCAwMFH788Udx3ZdffikEBASIdxD8zW9+I2zYsMFhP/PnzxdvQXzq1CkBgHD48OFmj0tE0mEfBKLr2LZtG8LCwlBfXw+73Y7f//73ePXVV8XH+/bt69Dv4LvvvsPJkycRHh7usJ/a2lp8//33qKqqwrlz55CYmCg+FhQUhIEDBzo1MzQqKipCYGAg7r33XpfLffLkSVy6dAkPPvigw3qbzYYBAwYAAIqLix3KAQBms9nlYzTatGkTli5diu+//x7V1dW4fPkyDAaDwzZdu3ZF586dHY5jt9tRUlKC8PBwfP/995g4cSImTZokbnP58mUYjUa3y0NEnmNAILqOQYMGYeXKlQgODkZMTAyCghxfNu3atXP4ubq6GgkJCfjoo4+c9nXDDTe0qgyhoaFuP6e6uhoA8MUXXzh8MANX+lVIpaCgAGPHjsXcuXORnJwMo9GIjRs3YvHixW6XdfXq1U6BJTAwULKyEpHrGBCIrqNdu3bo0aOHy9vfeuut2LRpE6Kiopy+RTfq1KkT9u3bh3vuuQfAlW/KhYWFuPXWW5vcvm/fvrDb7cjPz0dSUpLT4401GA0NDeK6uLg46PV6lJaWNlvz0Lt3b7HDZaO9e/de/ySvsmfPHtx444344x//KK77z3/+47RdaWkpzp49i5iYGPE4AQEB6NmzJ6KjoxETE4MffvgBY8eOdev4ROQd7KRIJLGxY8eiY8eOGD58OL799lucOnUKO3fuxAsvvIAff/wRADBt2jQsXLgQW7ZswYkTJ/D888+3OIdBt27dkJKSgqeffhpbtmwR9/nxxx8DAG688UbodDps27YN58+fR3V1NcLDw/HSSy9hxowZWL9+Pb7//nscOnQI7777rtjx77nnnsO///1vvPzyyygpKcGGDRuQnZ3t1vnefPPNKC0txcaNG/H9999j6dKlTXa4DAkJQUpKCr777jt8++23eOGFF/D444/DZDIBAObOnYusrCwsXboU//rXv3DkyBGsW7cOS5Yscas8RCQNBgQiibVt2xa7du1C165dMXLkSPTu3RsTJ05EbW2tWKPw4osvYty4cUhJSYHZbEZ4eDgeffTRFve7cuVKPPbYY3j++efRq1cvTJo0CTU1NQCAzp07Y+7cuZg1axaio6MxZcoUAMD8+fMxZ84cZGVloXfv3njooYfwxRdfoHv37gCu9Av429/+hi1btiA+Ph6rVq3CggUL3DrfYcOGYcaMGZgyZQr69++PPXv2YM6cOU7b9ejRAyNHjsQjjzyCwYMHo1+/fg7DGJ955hmsWbMG69atQ9++fXHvvfciOztbLCsR+ZZOaK5XFBEREWkWaxCIiIjICQMCEREROWFAICIiIicMCEREROSEAYGIiIicMCAQERGREwYEIiIicsKAQERERE4YEIiIiMgJAwIRERE5YUAgIiIiJwwIRERE5OT/AInZQTadzPIZAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_matrix(confuse)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 绘制错误分类的混淆矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
      "e:\\anaconda\\envs\\voice\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1509: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
     ]
    },
    {
     "data": {
      "image/png": "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ANi3b5/ZjRm4265CLDk5OYiJicHy5csRHR0NX19fbN++HatWrbK5rBs2bLAIWNzd3UUrKxFZjwECURNat26Nbt26Wb39ww8/jB07diAwMNDiKbpOcHAwjh8/jiFDhgC4+6Scm5uLhx9+uN7t+/TpA6PRiEOHDiEqKsri9boMRm1trWldWFgYtFotiouLG8w89OrVy9Tgss6xY8eaPsl7HD16FJ06dcIrr7xiWvfjjz9abFdcXIzLly8jJCTEdBw3Nzf06NEDQUFBCAkJwQ8//ICYmBibjk9EjsFGikQii4mJQUBAAMaNG4cvvvgC586dQ3Z2Nv70pz/h4sWLAIDZs2fjzTffxK5du3D27Fm8+OKLjY5h0LlzZ8TGxuL555/Hrl27TPv86KOPAACdOnWCRqPB3r17ce3aNZSXl8Pb2xvz58/H3LlzsXnzZhQVFeGrr77Cu+++a2r4N3PmTHz//fdYsGABCgoKsG3bNqSnp9t0vg899BCKi4uxfft2FBUVYe3atfU2uPT09ERsbCy+/vprfPHFF/jTn/6Ep556CjqdDgCwfPlypKSkYO3atfjf//6Hb7/9Fps2bcLq1attKg8RiYMBApHIWrVqhcOHD6Njx46YMGECevXqhWnTpqGystKUUZg3bx6ee+45xMbGIjIyEt7e3njyyScb3e/69evxxz/+ES+++CJ69uyJ6dOno6KiAgDQvn17LF++HIsWLUJQUBASEhIAACtWrMCSJUuQkpKCXr16YeTIkdi3bx+6dOkC4G67gH/+85/YtWsX+vXrh7S0NLzxxhs2ne/YsWMxd+5cJCQkoH///jh69CiWLFlisV23bt0wYcIEPPHEExgxYgT69u1r1o3xhRdewAcffIBNmzahT58+ePzxx5Genm4qKxE5l0ZoqFUUERERqRYzCERERGSBAQIRERFZYIBAREREFhggEBERkQUGCERERGSBAQIRERFZYIBAREREFhggEBERkQUGCERERGSBAQIRERFZYIBAREREFhggEBERkYX/D5S8+/HHdbwzAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fault_cm = fault_cls(true_label,pre_label)\n",
    "plot_matrix(fault_cm)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "voice",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
